/* 权限控制模块 */
import { constantRoutes } from '@/router'

export default {
  namespaced: true,
  state() {
    return {
      // 所有的路由映射（开始只有静态路由）
      routes: constantRoutes, // 所有人默认拥有静态路由
      btnPerm: [], // 所有按钮的权限
    }
  },
  getters: {},
  mutations: {
    // 添加动态路由给所有路由
    setRoutes(state, newRoutes) {
      // 静态路由 + 动态的路由
      state.routes = [...constantRoutes, ...newRoutes]
    },
    resetRoutes(state) {
      state.routes = constantRoutes
    },
    setBtnPerm(state, btnPerm) {
      state.btnPerm = btnPerm
    },
  },
  actions: {
    // filterRoutes(context, data) {
    //   let userRoutes = []
    //   data.forEach(item => {
    //     if (item.hidden === 2) {
    //       item.hidden = true
    //     } else {
    //       item.hidden = false
    //     }
    //     item.meta = { title: item.permission_name, icon: item.icon }
    //     item.path = item.route
    //     if (item.component === 'layout') {
    //       item.component = Layout
    //     } else {
    //       try {
    //         item.component = require('@/views/' + item.component).default
    //       } catch (error) {
    //         item.component = require('@/views/404').default
    //       }
    //     }
    //     const arr = []
    //     data.forEach(item => {
    //       if (item.parent_id === item.id) {
    //         arr.push(item)
    //       }
    //     })
    //     item.children = arr
    //   })
    //   userRoutes = data.filter(item => item.parent_id === 0)
    //   context.commit('setRoutes', userRoutes)
    //   // 返回整理好的动态路由
    //   return userRoutes
    // },

    filterRoutes(context, data) {
      //  data 就是服务器返回的该用户的角色对应的权限标识
      // 遍历所有的动态路由映射，判断它的name是不是在权限标识数组中，如果在说明属于该用户的动态路由映射
      let userRoutes = []
      data.forEach(ele => {
        if (ele.hidden === 2) {
          ele.hidden = true
        } else {
          ele.hidden = false
        }
        ele.meta = { title: ele.permission_name, icon: ele.icon }
        ele.path = ele.route
        ele.name = ele.permission_name
        try {
          if (ele.component === 'layout') {
            ele.component = require(`@/layout`).default
          } else {
            ele.component = require(`@/views/${ele.component}`).default
          }
        } catch (error) {
          ele.component = require('@/views/404').default
        }
        const arr = []
        data.forEach(item => {
          if (item.parent_id === ele.id) {
            arr.push(item)
          }
        })
        ele.children = arr
      })
      userRoutes = data.filter(ele => ele.parent_id === 0)

      context.commit('setRoutes', userRoutes)
      // 返回整理好的动态路由
      return userRoutes
    },

    setBtnPerm(context, btnPerm) {
      context.commit('setBtnPerm', btnPerm)
    },
    resetRoutes(context) {
      context.commit('resetRoutes')
    },
  },
}
